//!
/**
 ***********************************************************************************************************
 * <RBTransform implementation>
 ***********************************************************************************************************
 * @file RBTransform.cpp
 ***********************************************************************************************************/

#include "RBMainPCH.h"

/************************************************************************************************************
 * Includes
 ************************************************************************************************************/

#include "RBTransform.h"
#include "RBStream.h"

/************************************************************************************************************
 * Macros
 ************************************************************************************************************/

/************************************************************************************************************
 * Classes implementation
 ************************************************************************************************************/

/************************************************************************************************************/

const RBTransform RBTransform::IDENTITY;

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
RBTransform::RBTransform(const RBTransform& rhs)
{
    *this = rhs;
}

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
RBTransform& RBTransform::operator=(const RBTransform& rhs)
{
    Translate = rhs.Translate;
    Rotate = rhs.Rotate;
    Scale = rhs.Scale;
    return *this;
}

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
RBTransform RBTransform::operator*(const RBTransform& xForm) const
{

    RBTransform out;
    out.Scale =  Scale * xForm.Scale;
    out.Rotate = Rotate * xForm.Rotate;
    out.Translate = Translate + Scale * (Rotate * xForm.Translate);

    return out;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBTransform::Serialize(RBStream& rbStream)
{
    rbStream & Translate;
    rbStream & Rotate;
    rbStream & Scale;
}
